package com.hhkj.generator.util;

public class StringUtil {
	
	/**
	 * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空，则返回空字符串。</br>
	 * 例如：hello_world->helloWorld
	 * @param name 转换前的下划线大写方式命名的字符串
	 * @return 转换后的驼峰式命名的字符串
	 */
	public static String camelName(String name) {
	    StringBuilder result = new StringBuilder();
	    // 快速检查
	    if (name == null || name.isEmpty()) {
	        // 没必要转换
	        return "";
	    } else if (!name.contains("_")) {
	        // 不含下划线，仅将首字母小写
	        return name.substring(0, 1).toLowerCase() + name.substring(1);
	    }
	    // 用下划线将原始字符串分割
	    String camels[] = name.split("_");
	    for (String camel :  camels) {
	        // 跳过原始字符串中开头、结尾的下换线或双重下划线
	        if (camel.isEmpty()) {
	            continue;
	        }
	        // 处理真正的驼峰片段
	        if (result.length() == 0) {
	            // 第一个驼峰片段，全部字母都小写
	            result.append(camel.toLowerCase());
	        } else {
	            // 其他的驼峰片段，首字母大写
	            result.append(camel.substring(0, 1).toUpperCase());
	            result.append(camel.substring(1).toLowerCase());
	        }
	    }
	    return result.toString();
	}
	
	/**
	 * 将驼峰式命名的字符串转换为下划线大写方式。如果转换前的驼峰式命名的字符串为空，则返回空字符串。</br>
	 * 例如：HelloWorld->hello_world
	 * @param name 转换前的驼峰式命名的字符串
	 * @return 转换后下划线大写方式命名的字符串
	 */
	public static String underscoreName(String name) {
	    StringBuilder result = new StringBuilder();
	    if (name != null && name.length() > 0) {
	        // 将第一个字符处理成大写
	        result.append(name.substring(0, 1).toUpperCase());
	        // 循环处理其余字符
	        for (int i = 1; i < name.length(); i++) {
	            String s = name.substring(i, i + 1);
	            // 在大写字母前添加下划线
	            if (s.equals(s.toUpperCase()) && !Character.isDigit(s.charAt(0))) {
	                result.append("_");
	            }
	            // 其他字符直接转成大写
	            result.append(s.toLowerCase());
	        }
	    }
	    return result.toString();
	}
	
	public static String firstCharUpperCase(String src){
		if(src == null || src.length() == 0)
			return "";
		
		return src.substring(0, 1).toUpperCase() + src.substring(1);
	}
	
	/**
	 * 获取两个字符串最大的相同子串
	 * @param s1
	 * @param s2
	 * @return
	 */
	public static String getMaxSubString(String s1,String s2){
        String max = "",min = "";
        max = (s1.length() > s2.length()) ? s1 : s2;
        min = (max==s1)?s2: s1;     
        for(int x=0; x<min.length(); x++)
        {
            for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++)
            {
                String temp = min.substring(y,z);               
                if(max.contains(temp)){
                	return temp;
                }
            }
        }
        return "";
    }
	
	/**
     * 驼峰命名法工具
     *
     * @return toCapitalizeCamelCase(hello_world) == "HelloWorld"
     */
    public static String toCapitalizeCamelCase(String s) {
        if (s == null) {
            return null;
        }
        s = camelName(s);
        return s.substring(0, 1).toUpperCase() + s.substring(1);
    }

    /**
     * 将首字母变成大写
     * @param str
     * @return
     */
    public static String upperCase(String str) {
         char[] ch = str.toCharArray();
         if (ch[0] >= 'a' && ch[0] <= 'z') {
            ch[0] = (char) (ch[0] - 32);
         }
        return new String(ch);
    }

    public static void main(String[] args) {
		//System.out.println(camelName("order_item"));
		System.out.println(getMaxSubString("${webPath}/user/logout", "${webPath}/user/login"));
	}

}
